An automated email, SMS and AI phone-calling system that works your dead CRM leads for you — and hands you back the ones that are ready to talk. This is the complete build, screen by screen, in Zapier.
Every broker is sitting on a graveyard. Hundreds — often thousands — of people who once enquired about finance, never converted, and have not been contacted since.
This system goes back through them, one at a time, and restarts the conversation. It writes a personal email in your voice, follows up by SMS, and for the highest-intent leads it puts through an AI phone call. When someone replies, a second workflow reads the reply, works out what they meant, and either books them in, parks them, or removes them permanently.
You do nothing except answer the hot ones.
A short, human, compliant re-engagement email written fresh for each lead — never a mail-merge blast.
A follow-up text under 300 characters with a plain-English opt-out, sent only to leads with a mobile on file.
For high-priority leads only, an AI voice agent calls, has a real conversation, and books the callback.
Two workflows. One sends. One listens.
The engine is CRM-agnostic. Only the first module and the last module touch your CRM — everything in between is identical no matter what you run. That is why one product covers the whole market.
Closed platforms will not let an automation read them directly. So you export your dormant leads to a Google Sheet — a five-minute job you repeat monthly — and the engine reads the sheet instead of the CRM. Everything downstream is untouched: same AI, same email, same SMS, same AI call, same reply triage. The only thing you lose is the automatic write-back, which you replace with a second sheet the engine fills in and you re-import.
API access to aggregator-owned platforms is granted by the aggregator, not the broker, and the answer differs by group and sometimes by brokerage. Confirm access is available for a given account before quoting a native build — and default to the bridge method, which works everywhere without anyone's permission.
Fifteen minutes here saves an hour later. Get these four things ready.
The engine stores its campaign state on the contact record. Two custom Contact properties carry it, and everything else in this guide assumes they exist. Create them before you import anything, or the HubSpot modules will show as invalid.
In HubSpot go to Settings → Properties → Create property, object type Contact, and add these two. Use the internal names exactly as written — the blueprints are mapped to them.
Why this matters more than it looks. tbt_reactivation_state = opt_out is the suppression flag. When somebody replies STOP, workflow 2 writes that value, and the consent gate on the outbound side refuses to pass any contact carrying it. That is the entire opt-out mechanism. Without these two properties there is nothing stopping the engine contacting someone who has already asked you not to.
This system contacts real people who gave you their details, and only those people. It is not a cold-outreach tool and must never be pointed at a purchased list. Every message it sends carries an opt-out, and the opt-out is honoured automatically and permanently. Keep it that way — that is the difference between a reactivation campaign and a spam complaint.
Every screen below is the real thing. Follow them in order and you will have a working Zap.
In Zapier click Create → Zap. The first card on the canvas is the trigger — the thing that starts everything.
Now the Configure tab asks which list to watch. Choose the dormant list you built earlier. This is the single most important field in the whole Zap — it decides who gets contacted.
On the Test tab, click Test trigger. Zapier pulls a real contact from that list so the later steps have live data to map against. Pick one and click Continue with selected record.
Never let the engine run without this step. It is the thing that keeps you compliant and keeps your domain reputation intact.
Set two rules, joined with And:
| Field | Condition | Value | Why |
|---|---|---|---|
| Contact information: Email | Exists | — | No email, nothing to send. |
| Contact information: Lifecycle Stage | (Text) Does not exactly match | customer | Never re-pitch an existing client. |
Lists drift. Someone edits the list criteria six months from now and suddenly a thousand customers are in it. The filter is a second lock on the door, and it sits inside the Zap where nobody will accidentally change it.
Add a step, search ChatGPT (OpenAI), and choose the action event Conversation (the one marked Recommended, not Legacy). Connect your OpenAI account with the API key you created earlier.
On the Configure tab there are three fields that matter.
Model. Leave it on gpt-4o. It is fast, cheap and writes better Australian English than the mini models.
User Message. This is the lead's file. Type the fixed text, then use the + button to insert the HubSpot fields where shown in orange:
Reactivate this dormant lead. Broker business: [YOUR BUSINESS NAME]. Broker first name: [YOUR FIRST NAME]. SMS opt out wording: Reply STOP to opt out. Lead first name: {{Contact information: First Name}} Email: {{Contact information: Email}}
Instructions. This is the system prompt — the rules the AI writes under. Paste it exactly:
You are the AI assistant for an Australian mortgage broker. Write ONE short, warm, compliant re-engagement email to a dormant lead who once enquired about finance and then went quiet. RULES: Australian English. Plain, human, no hype, no emojis. Never give financial advice, never quote a rate, never promise approval. Never create false urgency. Under 120 words. Sign off from the broker. End with one plain sentence giving an easy opt out. Return ONLY the email body as simple HTML. No subject line, no JSON, no commentary, no code fences.
“Return ONLY the email body as simple HTML. No subject line, no JSON, no commentary, no code fences.” Without it, ChatGPT will happily wrap its answer in ```json or add “Here's your email!” at the top — and that goes straight into the message your lead receives. This one sentence is the difference between a professional email and an obviously-automated one.
Click Continue, then Test step. You should get a green confirmation and a readable email in the output.
Add a step and choose Gmail → Send Email (or Outlook, or Email by Zapier if you just want to see it work first). Then map three fields:
| Field | What to put in it |
|---|---|
| To | Insert 1. Contact information: Email |
| Subject | Type it yourself — A quick question about your finance enquiry tests well. Keep it lower-case and human. |
| Body | Insert 3. Output Text from the ChatGPT step |
Email by Zapier needs no setup, which makes it perfect for testing — but it caps at roughly 10 emails per hour and sends from Zapier's infrastructure, not yours. For a real campaign, connect Gmail or Outlook so replies land in your inbox and your domain builds its own sending reputation.
Email alone gets you maybe a 2–4% reply rate on dead leads. SMS roughly triples it. Add these two steps:
Hi {{Contact information: First Name}}, it's [YOUR FIRST NAME] from [YOUR BUSINESS NAME]. You enquired with us a while back about finance - are you still looking? Happy to help either way. Reply STOP to opt out.
Under the Spam Act 2003, every commercial message needs a functional unsubscribe. Reply STOP to opt out costs you eight words and removes your single biggest compliance risk. Workflow 2 processes those STOPs automatically.
This is the step that makes people sit up. For your highest-priority leads, an AI voice agent rings them, has a genuine back-and-forth conversation, and books the callback into your diary.
from_number YOUR_RETELL_NUMBER to_number {{Contact information: Mobile Phone Number}} override_agent_id YOUR_RETELL_AGENT_ID first_name {{Contact information: First Name}} broker_name [YOUR FIRST NAME] business_name [YOUR BUSINESS NAME]
Check numbers against the Do Not Call Register, keep calls inside 9am–8pm weekdays and 9am–5pm Saturdays, and have the agent identify itself as an assistant calling on your behalf within the first sentence. Put a Zapier Delay Until step in front of this if your campaign runs overnight.
Add a final step: HubSpot → Create Engagement (type: Note), associated to the contact ID from step 1.
TBT Reactivation Engine - contacted {{zap_meta_human_now}}. Email sent. SMS sent. Message: {{3. Output Text}}
Skip this and your CRM has no memory of what the robot said. Do it, and any broker in your team can open a contact and see the whole conversation in one place.
The first workflow starts conversations. This one is where the money is: it reads every reply and decides what happens next, in seconds, at any hour.
Create a second Zap. Trigger: Webhooks by Zapier → Catch Hook. Zapier gives you a URL — paste it into your SMS provider's inbound-reply callback and your Retell agent's webhook settings so every reply from every channel lands here.
For email replies, use Gmail → New Email Matching Search instead, searching your reactivation sender address.
Add ChatGPT (OpenAI) → Conversation again, with this prompt in Instructions:
You classify replies from dormant finance leads for an Australian
mortgage broker. Classify the reply into exactly one intent:
HOT - wants to talk now, asks about next steps, gives availability,
or asks a specific finance question.
WARM - interested but later, asks to be contacted in a few weeks or
months, or is curious but non-committal.
NOT_NOW - not interested right now, already sorted elsewhere, or asks
to be left alone for now without an explicit opt-out.
OPT_OUT - explicitly asks to be removed or unsubscribed, or replies STOP.
Also write a one-line summary and a suggested next action for the broker.
Return ONLY a JSON object with these exact keys:
intent, confidence, summary, suggested_next_action, sentiment
In User Message, insert the reply text from the webhook plus the lead's name and contact ID.
Add Paths by Zapier and create four. Each path's rule reads the intent value from step 2.
| Path | Rule | What it does |
|---|---|---|
| 🔥 Hot | intent contains HOT | HubSpot → Create Deal in your first pipeline stage, then Gmail → send you an alert with the reply and the AI's suggested next action. |
| Warm | intent contains WARM | HubSpot → Update Contact. Lead status OPEN, tbt_reactivation_state = warm, tbt_last_reactivation_at = today. Add them to your nurture list. |
| Not now | intent contains NOT_NOW | HubSpot → Update Contact. Lead status stays OPEN, tbt_reactivation_state = not_now, tbt_last_reactivation_at = today. Not a no — a not yet, and the date is what parks them for 90 days. |
| Opt out | intent contains OPT_OUT | HubSpot → Update Contact. tbt_reactivation_state = opt_out, lead status UNQUALIFIED. Both are conditions on the consent gate in workflow 1, so this contact can never be selected again. |
The opt-out path does not delete anybody and it does not touch HubSpot's own hs_email_optout property, which the API cannot write to. It sets tbt_reactivation_state to opt_out, and the consent gate in workflow 1 filters out any contact carrying that value. Your dormant-leads list filter must include that condition — if it does not, nothing is suppressing anyone.
Before you turn anything on, send yourself a test reply saying just “STOP”, confirm it lands in the opt-out path, then open the contact in HubSpot and check tbt_reactivation_state now reads opt_out. Then re-run workflow 1 and confirm that contact is not contacted a second time. That last step is the one that matters.
Across brokers running this pattern, a well-written reactivation sequence on a genuinely dormant list typically produces a reply rate in the mid single digits, of which roughly a quarter to a third are worth a real conversation. Your numbers will depend entirely on how old the list is and how good the original enquiry was — run your first batch, measure it, and use your own figures from then on. The leads cost you nothing; they are already in the CRM.
| Symptom | Cause | Fix |
|---|---|---|
| Zap never fires | The list is a HubSpot active list, or nobody has been added since you published | Use a static list, and re-add one contact to trigger it |
| Email contains ```json or “Here's your email” | The Instructions prompt was edited | Re-paste the last line of the prompt from step 3 word for word |
| “Account connection is expired” | Gmail or HubSpot OAuth token lapsed | Click Reconnect this account and sign in again |
| SMS step is skipped every time | Mobile numbers are stored in Phone, not Mobile Phone | Point the filter and the SMS step at whichever field your CRM actually uses |
| Replies never trigger workflow 2 | Webhook URL not saved in the SMS provider | Re-paste the Catch Hook URL and send a test reply |
| Task limit warnings | Each lead consumes roughly 4–6 Zapier tasks (triggers and filters are free; every action is billed) | Budget 4–6 tasks per lead when you size your plan |
The same engine, configured against your CRM, your voice and your compliance settings — installed and tested, with the first batch running before you hang up.
Talk to The Broker Times